#include "apps.inc.h"
#include "tests.inc.h"
#include <stdio.h>
#include <exception>




void test1(){    
    PrimaryKeyPersona *PK = new PrimaryKeyPersona();
    Persona *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8, *p9, *p10;    
    char nombre1[] = "primeroji", nombre2[] = "segundojj", nombre3[] = "tercero", nombre4[] = "cuarto", nombre5[] = "quinto",
    nombre6[] = "sexto", nombre7[] = "septimo", nombre8[] = "octavo", nombre9[] = "noveno", nombre10[] = "decimo";
    char dni1[] = "11111111", dni2[] = "22222222", dni3[] = "33333333", dni4[] = "44444444", dni5[] = "55555555", 
    dni6[] = "66666666", dni7[] = "77777777", dni8[] = "88888888", dni9[] = "99999999", dni10[] = "10101010";
    char apellido[] = "perezgggg";
    
    p1 = new Persona(nombre1,apellido,dni1);
	p2 = new Persona(nombre2,apellido,dni2);
	p3 = new Persona(nombre3,apellido,dni3);
	p4 = new Persona(nombre4,apellido,dni4);
	p5 = new Persona(nombre5,apellido,dni5);
	p6 = new Persona(nombre6,apellido,dni6);
	p7 = new Persona(nombre7,apellido,dni7);
	p8 = new Persona(nombre8,apellido,dni8);
	p9 = new Persona(nombre9,apellido,dni9);
	p10 = new Persona(nombre10,apellido,dni10);    
	
	char path[]="./test.bin";
	//FabRecAlmacenamiento *f=new FabRecAlmacenamiento(); 
	RecursoDeAlmacenamiento *rec = FabRecAlmacenamiento::recursoArchivo_IndiceArbol(path, FIJA, REGISTROS, PK);
 //RecursoDeAlmacenamiento *rec = FabRecAlmacenamiento::recursoBuffer_IndiceArbol(FIJA, REGISTROS, 512,PK);
    try{	
         rec->insertar(p1);
         rec->insertar(p2);
         rec->insertar(p3);
         rec->insertar(p4);
         rec->insertar(p5);
         rec->insertar(p6);
         rec->insertar(p7);
         rec->insertar(p8);
         rec->insertar(p9);
         rec->insertar(p10);
 
    }
    catch(exception *e){
        printf("%s",e->what());
    }
    
    try{
        rec->leer(p1);        
        p1->print();
    }
    catch(exception *e){
        printf("%s",e->what());
    }
    char nombre11[]="juan";
    char ape1[]="gomez";
    Persona *p11 = new Persona(nombre11,ape1,dni1);
    rec->modificar(p11);
    
    char n[]="algo",a[]="mas";
    Persona *p12 = new Persona(n,a,dni3);
    
    
    try{
    	rec->leer(p1);        
        p1->print();
    	
        rec->leer(p12);        
        p12->print();
    }
    catch(exception *e){
        printf("%s",e->what());
    }
	rec->eliminar(p7);
	/*	
	try{
        rec->leer(p7);        
        printf("ERROR, DEBERIA HABERLO BORRADO");
    }
    catch(exception *e){
        printf("PERSONA ELIMINADA");
    }
    */
    delete(rec);
    delete(p1);
    delete(p2);
    delete(p3);
    delete(p4);
    delete(p5);
    delete(p6);
    delete(p7);
    delete(p8);
    delete(p9);
    delete(p10);
    delete(p11);
    delete(PK); 
}

void test(){    
    PrimaryKeyPersona *PK = new PrimaryKeyPersona();
    Persona *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8, *p9, *p10;    
    char nombre1[] = "primeroji", nombre2[] = "segundojj", nombre3[] = "tercero", nombre4[] = "cuarto", nombre5[] = "quinto",
    nombre6[] = "sexto", nombre7[] = "septimo", nombre8[] = "octavo", nombre9[] = "noveno", nombre10[] = "decimo";
    char dni1[] = "11111111", dni2[] = "222222222", dni3[] = "33333333", dni4[] = "44444444", dni5[] = "55555555", 
    dni6[] = "66666666", dni7[] = "77777777", dni8[] = "88888888", dni9[] = "99999999", dni10[] = "10101010";
    char apellido[] = "perezgggg";
    
    p1 = new Persona(nombre1,apellido,dni1);
p2 = new Persona(nombre2,apellido,dni2);
p3 = new Persona(nombre3,apellido,dni3);
p4 = new Persona(nombre4,apellido,dni4);
p5 = new Persona(nombre5,apellido,dni5);
p6 = new Persona(nombre6,apellido,dni6);
p7 = new Persona(nombre7,apellido,dni7);
p8 = new Persona(nombre8,apellido,dni8);
p9 = new Persona(nombre9,apellido,dni9);
p10 = new Persona(nombre10,apellido,dni10);    

char path[]="./test.bin";
RecursoDeAlmacenamiento *rec = FabRecAlmacenamiento::recursoArchivo_IndiceArbol(path, FIJA, BLOQUES, PK);

    try{
         rec->insertar(p1);
         rec->insertar(p2);
         rec->insertar(p3);
         rec->insertar(p4);
         rec->insertar(p5);
         rec->insertar(p6);
         rec->insertar(p7);
         rec->insertar(p8);
         rec->insertar(p9);
         rec->insertar(p10);
 
    }
    catch(exception *e){
        printf("%s",e->what());
    }
    return;
    try{
        rec->leer(p1);        
        p1->print();
    }
    catch(exception *e){
        printf("%s",e->what());
    }
    char nombre11[]="juan";
    char ape1[]="gomez";
    Persona *p11 = new Persona(nombre11,ape1,dni1);
    rec->modificar(p11);
    try{
        rec->leer(p1);        
        p1->print();
    }
    catch(exception *e){
        printf("%s",e->what());
    }
rec->eliminar(p9);
try{
        rec->leer(p9);        
        printf("ERROR, DEBERIA HABERLO BORRADO");
    }
    catch(exception *e){
        printf("PERSONA ELIMINADA");
    }
    
    delete(rec);
    delete(p1);
    delete(p2);
    delete(p3);
    delete(p4);
    delete(p5);
    delete(p6);
    delete(p7);
    delete(p8);
    delete(p9);
    delete(p10);
    delete(p11);
    delete(PK); 
}

void test2(){    
    PrimaryKeyPersona *PK = new PrimaryKeyPersona();
    Persona *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8, *p9, *p10;    
    char nombre1[] = "primeroji", nombre2[] = "segundojj", nombre3[] = "tercero", nombre4[] = "cuarto", nombre5[] = "quinto",
    nombre6[] = "sexto", nombre7[] = "septimo", nombre8[] = "octavo", nombre9[] = "noveno", nombre10[] = "decimo";
    char dni1[] = "11111111", dni2[] = "222222222", dni3[] = "33333333", dni4[] = "44444444", dni5[] = "55555555", 
    dni6[] = "66666666", dni7[] = "77777777", dni8[] = "88888888", dni9[] = "99999999", dni10[] = "10101010";
    char apellido[] = "perezgggg";
    
    p1 = new Persona(nombre1,apellido,dni1);
	p2 = new Persona(nombre2,apellido,dni2);
	p3 = new Persona(nombre3,apellido,dni3);
	p4 = new Persona(nombre4,apellido,dni4);
	p5 = new Persona(nombre5,apellido,dni5);
	p6 = new Persona(nombre6,apellido,dni6);
	p7 = new Persona(nombre7,apellido,dni7);
	p8 = new Persona(nombre8,apellido,dni8);
	p9 = new Persona(nombre9,apellido,dni9);
	p10 = new Persona(nombre10,apellido,dni10);    
	
	char path[]="./testhash.bin";
	RecursoDeAlmacenamiento *rec = FabRecAlmacenamiento::recursoArchivo_IndiceHash(path, FIJA, PK);

    try{	
         rec->insertar(p2);
         rec->insertar(p2);
         rec->insertar(p3);
         rec->insertar(p4);
         rec->insertar(p5);
         rec->insertar(p6);
         rec->insertar(p7);
         rec->insertar(p8);
         rec->insertar(p9);
         rec->insertar(p10);
 
    }
    catch(exception *e){
        printf("%s",e->what());
    }
    return;
    try{
        rec->leer(p1);        
        p1->print();
    }
    catch(exception *e){
        printf("%s",e->what());
    }
    char nombre11[]="juan";
    char ape1[]="gomez";
    Persona *p11 = new Persona(nombre11,ape1,dni1);
    rec->modificar(p11);
    try{
        rec->leer(p1);        
        p1->print();
    }
    catch(exception *e){
        printf("%s",e->what());
    }
	rec->eliminar(p9);
	try{
        rec->leer(p9);        
        printf("ERROR, DEBERIA HABERLO BORRADO");
    }
    catch(exception *e){
        printf("PERSONA ELIMINADA");
    }
    
    delete(rec);
    delete(p1);
    delete(p2);
    delete(p3);
    delete(p4);
    delete(p5);
    delete(p6);
    delete(p7);
    delete(p8);
    delete(p9);
    delete(p10);
    delete(p11);
    delete(PK); 
}



int main(){
    //test1();
    test2();
    //test();
    printf("FIN DEL TEST");
    return 0;   
}
